# coding=utf-8
from flask import current_app, jsonify
from ihome import constants
from ihome import redis_store
from ihome.api_1_0 import api
from ihome.models import Area
from ihome.utils.response_code import RET


@api.route('/areas')
def get_areas_info():
    """
    查询城区信息
    :return:
    """
    # 先从缓存中去取,如果缓存中没有,再去数据库中取
    try:
        areas = redis_store.get('area_info')
    except Exception as e:
        current_app.logger.error(e)
        areas = None
    # 如果不为空,做查询操作
    if areas:
        return jsonify(errno=RET.OK, errmsg='获取成功', data=eval(areas))
    # 从数据库取
    try:
        areas = Area.query.all()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='获取城区信息失败')
    # 因为查询出来全是对象实例,不能直接进行json转化,所以定义一个数组保存所有的字典信息
    areas_list = []
    for area in areas:
        areas_list.append(area.to_dict())
    # 存储json_areas数据到redis缓存中
    try:
        redis_store.set('area_info', constants.AREA_INFO_REDIS_EXPIRES, areas_list)
    except Exception as e:
        current_app.logger.error(e)
    return jsonify(errno=RET.OK, errmsg='获取成功', data=areas_list)
